SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spAltaDePermisoAUsuario] 
@idUsuario Int,
@idPermiso Int,
@type Varchar(10),
@procedure Varchar(50)
AS
SET NOCOUNT ON
Declare @CodError Int, @SQL Varchar(500)

Select @CodError = 0

If @type = 'tablas' Begin

   If Not Exists(Select * From tb_RelUsuarioPermisos Where idUsuario = @idUsuario And idPermiso = @idPermiso) -- El permiso no existe sobre las tablas SAGE
   Begin
	Insert tb_RelUsuarioPermisos Select @idUsuario, @idPermiso
	If @@Error <> 0
		Select @CodError = @@Error

	--Si es listar o listardetalle se agrega el permiso de SELECT sobre la tabla.
	If (Select Substring(Permiso, 5, 6) From tb_Permisos Where idPermiso = @idPermiso) = 'listar'  Begin 
		If (Select Substring(Permiso, 11, 8) From tb_Permisos Where idPermiso = @idPermiso) = 'detalles' 
			Select @SQL = 'GRANT SELECT ON tb_'+(Select Substring( Permiso,19,len(Permiso)-15) From tb_Permisos Where idPermiso = @idPermiso)+' TO '+(Select Usuario From tb_Usuarios Where idUsuario = @idUsuario)
		Else
			Select @SQL = 'GRANT SELECT ON tb_'+(Select Substring( Permiso,11,len(Permiso)-7) From tb_Permisos Where idPermiso = @idPermiso)+' TO '+(Select Usuario From tb_Usuarios Where idUsuario = @idUsuario)
		EXEC(@SQL)
	End

	--Si es Agregar se agrega el permiso de INSERT sobre la tabla.
	If (Select Substring(Permiso, 5, 7) From tb_Permisos Where idPermiso = @idPermiso) = 'agregar' Begin
		Select @SQL = 'GRANT INSERT ON tb_'+(Select Substring( Permiso,12,len(Permiso)-8) From tb_Permisos Where idPermiso = @idPermiso)+' TO '+(Select Usuario From tb_Usuarios Where idUsuario = @idUsuario)
		EXEC(@SQL)
	End

	--Si es Eliminar se agrega el permiso de DELETE sobre la tabla.
	If (Select Substring(Permiso, 5, 6) From tb_Permisos Where idPermiso = @idPermiso) = 'borrar' Begin
		Select @SQL = 'GRANT DELETE ON tb_'+(Select Substring( Permiso,11,len(Permiso)-7) From tb_Permisos Where idPermiso = @idPermiso)+' TO '+(Select Usuario From tb_Usuarios Where idUsuario = @idUsuario)
		EXEC(@SQL)
	End
	
	--Si es Modificar agrega el permiso de UPDATE sobre la tabla.
	If (Select Substring(Permiso, 5, 9) From tb_Permisos Where idPermiso = @idPermiso) = 'modificar' Begin
		Select @SQL = 'GRANT UPDATE ON tb_'+(Select Substring( Permiso,14,len(Permiso)-10) From tb_Permisos Where idPermiso = @idPermiso)+' TO '+(Select Usuario From tb_Usuarios Where idUsuario = @idUsuario)
		EXEC(@SQL)
	End
   End
End
Else Begin
	Select @SQL = 'GRANT EXECUTE ON '+@Procedure+' TO '+(Select usuario From tb_Usuarios Where idUsuario = @idUsuario)
	EXEC(@SQL)
End
GO
